/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [FeeManagementMain.java]
 * Creation Date        [10-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_01_console_app.fee_mgmt;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import pkg_01_console_app.util.ConsoleInput;

/**
 * 资费管理类: 以控制台方式提供对资费的增删改查等操作
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class FeeManagementMain {

	private static FeeRecordSet record = new FeeRecordSet();

	/**
	 * 资费管理程序主方法<br>
	 * 该方法的主要功能有: 资费录入, 资费修改, 资费删除, 资费查询等功能<br>
	 * 资费查询功能包括: 查询所有记录, 按资费编号查询, 按资费名称查询, 按基本资费查询<br>
	 * 查询所有记录并排序, 按资费名称查询并排序, 按基本资费, 查询并排序等功能
	 */
	public static void main(String[] args) throws IOException {
		boolean play = true; // 确定用户是否继续使用本程序
		MenuUtil.printWelcomMessage(); // 打印欢迎信息
		while (play) {
			MenuUtil.printMainMenu(); // 打印主菜单
			int oper = ConsoleInput.inputInt("请选择一个操作: ");
			switch (oper) {
			case 1:
				insertFee(); // 插入资费
				break;
			case 2:
				updateFee(); // 更新资费
				break;
			case 3:
				deleteFee(); // 删除资费
				break;
			case 4:
				serchFee(); // 查询资费
				break;
			case 5:
				play = false; // 退出程序
				break;
			}
		}
		MenuUtil.printExit(); // 打印退出信息
	}

	@SuppressWarnings("resource")
	private static void insertFee() throws IOException { // 插入资费
		System.out.println("请按顺序输入资费名称, 基本费, 月租费, 资费描述信息, 用英文字符逗号隔开. ");
		Scanner scanner = new Scanner(ConsoleInput.inputString("请输入: "))
				.useDelimiter(","); // 从键盘接收指定格式的数据并分解
		Fee fee = new Fee(scanner.next(), scanner.nextInt(),
				scanner.nextDouble(), scanner.next());
		if (record.insert(fee)) {
			System.out.println("资费插入成功! ");
		} else {
			System.out.println("资费插入失败! ");
		}
		scanner.close();
	}

	@SuppressWarnings("resource")
	private static void updateFee() throws IOException { // 更新资费
		Fee fee = record.findById(ConsoleInput.inputInt("请输入资费编号: "));
		System.out.println("请按顺序输入新的资费名称, 基本费, 月租费, 资费描述信息, 用英文字符逗号隔开. ");
		Scanner scanner = new Scanner(ConsoleInput.inputString("请输入: "))
				.useDelimiter(","); // 从键盘接收指定格式的数据并分解
		fee.setName(scanner.next());
		fee.setBasefee(scanner.nextInt());
		fee.setRatefee(scanner.nextInt());
		fee.setDescription(scanner.next());

		scanner.close();
		if (record.update(fee)) {
			System.out.println("资费更新成功! ");
		} else {
			System.out.println("资费更新失败! ");
		}
	}

	private static void deleteFee() throws IOException { // 删除资费
		Fee fee = record.findById(ConsoleInput.inputInt("请输入资费编号: "));
		if (record.delete(fee)) {
			System.out.println("资费删除成功! ");
		} else {
			System.out.println("资费删除失败! ");
		}
	}

	private static void serchFee() throws IOException { // 查找资费
		boolean search = true; // 确定是否在资费菜单内循环
		while (search) {
			MenuUtil.printQueryMenu();
			int oper = ConsoleInput.inputInt("请选择一个操作: ");
			List<Fee> result = null; // 定义一个集合, 将查找结果放入此集合
			switch (oper) {
			case 1:
				result = record.findAll(); // 查找全部
				break;
			case 2:
				result = new ArrayList<Fee>();
				Fee fee = record.findById(ConsoleInput.inputInt("请输入要查找的id: ")); // 按资费编号查找
				result.add(fee);
				break;
			case 3:
				result = record.findByName(ConsoleInput
						.inputString("请输入要查找的名称: ")); // 按资费名称查找
				break;
			case 4:
				System.out.println("请按顺序输入基本资费的下限, 上限, 中间用逗号隔开. ");
				Scanner scanner = new Scanner(ConsoleInput.inputString("请输入: "))
						.useDelimiter(",");
				result = record.findByBaseFeeRange(scanner.nextDouble(),
						scanner.nextDouble()); // 按基本资费的范围查找
				break;
			case 5:
				System.out.println("排序规则: 1--按编号排序, 2--按姓名排序, 3--按基本资费排序");
				result = record.findAll(ConsoleInput.inputInt("请输入排序规则: ")); // 查找全部并排序
				break;
			case 6:
				System.out.println("请按顺序输入姓名, 排序规则, 中间用逗号隔开. ");
				System.out.println("排序规则: 1--按编号排序, 2--按姓名排序, 3--按基本资费排序");
				scanner = new Scanner(ConsoleInput.inputString("请输入: "))
						.useDelimiter(",");
				result = record.findByName(scanner.next(), scanner.nextInt()); // 按资费名称查找并排序
				break;
			case 7:
				System.out.println("请按顺序输入下限, 上限和排序规则, 中间用逗号隔开. ");
				System.out.println("排序规则: 1--按编号排序, 2--按姓名排序, 3--按基本资费排序");
				scanner = new Scanner(ConsoleInput.inputString("请输入: "))
						.useDelimiter(","); // 按基本资费的范围查找并排序
				result = record.findByBaseFeeRange(scanner.nextDouble(),
						scanner.nextDouble(), scanner.nextInt());
				break;
			case 8:
				search = false; // 退出查询菜单
				break;
			}
			if (result == null) { // 如果result为空, 退出查询菜单
			} else if (result.size() > 0) { // 如果查到的结果集大于0
				System.out.println("查到的结果如下: ");
				for (Fee fee : result) {
					System.out.println(fee);
				}
			} else { // 没有查到相应的结果
				System.out.println("没有查到相应的结果! ");
			}
		}
	}
}
